<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>继承</title>
</head>
<script>
    function Person1() {

    }

    /*
    * 函数也可以被继承
    * */
    class Student1 extends Person1{

    }


    class Person {

        constructor(name) {
           // 构造函数的本质
           /* this = new Object()
            this.xxx = xxx
            return this
            */
            this.name = 'name'
        }
    }

    class Student extends Person{
        /*
        * 因为Student类继承了父类,所以在构造函数中不会像上面那样去操作了 —— 不会为this赋值了
        * 调用super会将父类中返回的对象赋值给子类的this
        * 所以我们不能在super之前调用this
        * */

        constructor() {
            super();
        }

    }

    /*
    * 子类如果没有构造函数的话编译器会自动的将父类的带参构造函数复制给子类
    *
    * */

    class Girl extends Person{

    }

    new Girl('A')


    /*
    * 之前说到过 构造函数默认返回this 也可以自定义返回对象
    * 如果子类的构造函数中没有显示的调用super的话 返回一个对象也行
    *
    * */

    class Boy extends Person{
        constructor() {
            return {

            }
        }
    }






</script>
<body>
</body>
</html>